home *** CD-ROM | disk | FTP | other *** search
/ .net 2002 March / DotNetMagazine-Issue107-Coverdisc-NET107-02-03-PCMac.bin / pc / PC Software / free_browsing / DavesQckSearchDbar3-14 / dqsd.exe / tools.js < prev    next >
Text File  |  2002-10-03  |  5KB  |  205 lines

  1. var DQSD_BROWSER_WINDOW_NAME = "DQSDBrowserWindow";
  2.  
  3. // IE 5.0 and earlier don't have splice, push
  4. if (!Array.prototype.splice)
  5. {
  6.   function array_splice(ind,cnt)
  7.   {
  8.     removeArray = this.slice(ind,ind+cnt);
  9.     endArray = this.slice(ind+cnt);
  10.     this.length = ind;
  11.     for (var i=2; i < arguments.length; i++)
  12.       this[this.length] = arguments[i];
  13.     for (var i=0; i < endArray.length; i++)
  14.       this[this.length] = endArray[i];
  15.     return removeArray;
  16.   }
  17.   Array.prototype.splice = array_splice;
  18. }
  19.  
  20. if (!Array.prototype.push)
  21. {
  22.   function array_push()
  23.   {
  24.     for (var i=0; i<arguments.length; i++)
  25.       this[this.length] = arguments[i];
  26.     return this.length;
  27.   }
  28.   Array.prototype.push = array_push;
  29. }
  30.  
  31. // Tools that rely on DQSDTools.dll
  32.  
  33. var DQSDLauncher = null;
  34. var triedToCreateLauncher = false;
  35. useExternalBrowser = (launchmode > 0);
  36.  
  37. function ensureLauncher()
  38. {
  39.   if (!triedToCreateLauncher)
  40.   {
  41.     triedToCreateLauncher = true;
  42.  
  43.     try
  44.     {
  45.       DQSDLauncher = new ActiveXObject("DQSDTools.Launcher");
  46.     }
  47.     catch (e)
  48.     {
  49.       alert('Unable to instantiate DQSDTools.Launcher:\n' + e.description);
  50.       DQSDLauncher = null;
  51.     }
  52.   }
  53.   return (DQSDLauncher != null);
  54. }
  55.  
  56. if (useExternalBrowser)
  57. {
  58.   if (ensureLauncher())
  59.   {
  60.     var browserPath = DQSDLauncher.pathDefaultBrowser
  61.     if (launchmode != 0 && browserPath.toLowerCase().indexOf("iexplore.exe") > 0)
  62.       useExternalBrowser = false;
  63.   }
  64.   else // Gracefully ignore problems creating the control.
  65.   {
  66.     useExternalBrowser = false;
  67.   }
  68. }
  69.  
  70. // read file
  71. function readFile(filename)
  72. {
  73.   if (ensureLauncher())
  74.   {
  75.     return DQSDLauncher.ReadFile(filename);
  76.   }
  77.   else
  78.     throw "Unable to read file " + filename;
  79. }
  80.  
  81. // write file
  82. function writeFile(filename, contents)
  83. {
  84.   if (ensureLauncher())
  85.   {
  86.     DQSDLauncher.WriteFile(filename, contents);
  87.   }
  88.   else
  89.     throw "Unable to write file " + filename;
  90. }
  91.  
  92. // Here's a quick hack to append to an existing file, but
  93. // is very slow because it rewrites the whole file.  If
  94. // this is needed for anything but debugging, the component
  95. // should be modified to have something like an AppendFile 
  96. // method.
  97. function appendFile(filename, contents)
  98. {
  99.   if (ensureLauncher())
  100.   {
  101.     var curr = '';
  102.     try
  103.     {
  104.       curr = DQSDLauncher.ReadFile(filename);
  105.     }
  106.     catch (e) {}
  107.     DQSDLauncher.WriteFile(filename, curr + contents);
  108.   }
  109.   else
  110.     throw "Unable to append to file " + filename;
  111. }
  112.  
  113. // get files
  114. function getFiles(directory)
  115. {
  116.   if (ensureLauncher())
  117.   {
  118.     try
  119.     {
  120.       return DQSDLauncher.GetFiles(directory);
  121.     }
  122.     catch (e)
  123.     {
  124.       return "";
  125.     }
  126.   }
  127.   else
  128.     throw "Unable to get files from directory " + directory;
  129. }
  130.  
  131. // read tab-delimited, or pipe (|) delimited file
  132. function readTabDelimitedFile(filename)
  133. {
  134.   var fileText = "";
  135.   try {fileText = readFile(filename);} catch (e) {}
  136.   fileText = fileText.replace(/\r\n/g,"\n");
  137.   var fileLines = fileText.split("\n");
  138.   var fileTable = [];
  139.   for (var i = 0; i < fileLines.length; i++)
  140.   {
  141.     if (!fileLines[i].match(/^\s*($|\/\/)/))  // ignore comments (//) and blank lines
  142.     {
  143.       //must prepend a space or the split will complain on the gg search
  144.       if (fileLines[i].match(/^[\|\t]/))
  145.       {
  146.         fileLines[i]=" "+fileLines[i];
  147.       }
  148.       //split on the pipe symbol or the tab character 
  149.       fileTable.push(fileLines[i].split(/[\|\t]/));
  150.     }
  151.   }
  152.   return fileTable;
  153. }
  154.  
  155. function isInternalSearch( fn )
  156. {
  157.   return (fn.substr(0,INTERNAL_FUNC_PREFIX.length) == INTERNAL_FUNC_PREFIX)
  158. }
  159.  
  160. function getSearchAliases( search )
  161. {
  162.   return isInternalSearch(search.aliases[0]) ? search.aliases.slice(1).join(', ') : search.aliases.join(', ');
  163. }
  164.  
  165. function getFirstAlias( search )
  166. {
  167.   var alias = '';
  168.   
  169.   // If it's an internal search, then the first name will be the internal name (_dqsd_internal_fn_??)
  170.   // so return the second alias which should always be there, _unless_ this is a shortcut (mapping to 
  171.   // an internal function) defined aliases.txt that was overridden by a shortcut in localaliases.txt.
  172.   if ( isInternalSearch(search.aliases[0]) )
  173.   {
  174.     if ( search.aliases.length > 1 )
  175.     {
  176.       alias = search.aliases[1];
  177.     }
  178.     else
  179.     {
  180.       alias = ''; // could return the internal name here, but that would be weird.
  181.     }
  182.   }
  183.   else
  184.   {
  185.     alias = search.aliases[0];
  186.   }
  187.   return alias;
  188. }
  189.  
  190. // This method just is just a convenience for instantiating the same
  191. // same MSXML DOM each time. This method is now changed
  192. // to probe for older versions of MSXML, in case the newest
  193. // version is not installed on the machine.
  194. function getMSXMLDOMDocumentInstance()
  195. {
  196.   try
  197.   {
  198.      return new ActiveXObject("Msxml2.DOMDocument");
  199.   }
  200.   catch(e)
  201.   {
  202.      return new ActiveXObject("Msxml.DOMDocument");
  203.   }
  204. }
  205.